import router from './router'
import {useUserAuthStore} from '@/store/modules/auth'
import {useMenuStore} from '@/store/modules/menu'
// 定义白名单：不需要验证
const whiteList = ['/login']
router.beforeEach(async (to, from, next) => {
    const menuStore = useMenuStore()
    const userAuthStore = useUserAuthStore();
    // 获取token
    const token = userAuthStore.token
    // 🔥 修复：增强token验证，检查token是否为空字符串
    if (token && token.trim() !== '') {
        if (to.path === '/login' || to.path === '/') {
            next({path:'/'})
        } else {
            // 判断权限数据是否存在
            const hasRoles = userAuthStore.permissions.length > 0;
            if (hasRoles) {
                console.log(userAuthStore.permissions)
                next()
            } else {
                console.log("获取数据")
                try {
                    // 🚀 性能优化：快速跳转模式
                    // 先获取用户信息，然后立即允许跳转，菜单在后台异步加载
                    await userAuthStore.getUserInfo()
                    
                    // 🚀 关键优化：如果是跳转到首页，立即允许跳转，菜单异步加载
                    if (to.path === '/' || to.path === '/dashboard') {
                        // 立即跳转，用户可以更早看到页面
                        next()
                        
                        // 在后台异步加载菜单，不阻塞页面显示
                        menuStore.getMenuList(router).catch(error => {
                            console.error('菜单加载失败:', error)
                        })
                    } else {
                        // 对于其他页面，仍需等待菜单加载完成
                        await menuStore.getMenuList(router)
                        next({...to, replace: true})
                    }
                } catch (error) {
                    console.error('权限验证失败:', error)
                    // 清空认证信息(token,name,userId,permissions)
                    userAuthStore.clearAuthInfo()
                    // 清理菜单状态
                    menuStore.$reset()
                    next({path:'/login'})
                }

            }
        }
    } else {
        if (whiteList.indexOf(to.path) !== -1) { // 在白名单中，直接放行
            next()
        } else { // 不在白名单中，跳转到登录页
            next('/login')
        }
    }
})
